package com.taobao.zeus.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.quartz.CronExpression; public class CronExpParser { /** * 解析corn表达式,生成指定日期的时间序列 * * @param cronExpression * cron表达式 * @param cronDate * cron解析日期 * @param result * crom解析时间序列 * @return 解析成功失败 * */ public static boolean Parser(String cronExpression, String cronDate, List<String> result) { if (cronExpression == null || cronExpression.length() < 1 || cronDate == null || cronDate.length() < 1) { return false; } else { CronExpression exp = null; try { // 初始化cron表达式解析器 exp = new CronExpression(cronExpression); } catch (ParseException e) { e.printStackTrace(); return false; } // 定义生成时间范围 // 定义开始时间,前一天的23点59分59秒 Calendar c = Calendar.getInstance(); String sStart = cronDate + " 00:00:00"; SimpleDateFormat sdf = new java.text.SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); Date dStart = null; try { dStart = sdf.parse(sStart); } catch (ParseException e) { e.printStackTrace(); } c.setTime(dStart); c.add(Calendar.SECOND, -1); dStart = c.getTime(); // 定义结束时间,当天的23点59分59秒 c.add(Calendar.DATE, 1); Date dEnd = c.getTime(); // 生成时间序列 java.util.Date dd = dStart; dd = exp.getNextValidTimeAfter(dd); while ((dd.getTime() >= dStart.getTime()) && (dd.getTime() <= dEnd.getTime())) { result.add(sdf.format(dd)); dd = exp.getNextValidTimeAfter(dd); } exp = null; } return true; } // CRON表达式 private static final String CRON_EXPRESSION = "2014-09-14 03:00:00"; //private static final String CRON_EXPRESSION = "0 0 3 ? * sun"; // 生成指定日期的CRON时间序列 private static final String CRON_DATE = "2014-09-14"; public static void main(String[] args) { List<String> lTime = new ArrayList<String>(); if (!CronExpParser.Parser(CRON_EXPRESSION, CRON_DATE, lTime)) { System.out.println("无法生成Cron表达式:日期," + CRON_DATE + ";不符合规则cron表达式:" + CRON_EXPRESSION); } for (int i = 0; i < lTime.size(); i++) { System.out.println(lTime.get(i)); } System.out.println(lTime.size()); } }